package pruebas;

import java.util.ArrayList;

import juego.Avioneta;
import juego.Botin;
import juego.Cohete;
import juego.Coordenada;
import juego.Laser;
import juego.Movil;
import juego.Proyectil;
import juego.Torpedo;
import juego.TorpedoRastreador;
import junit.framework.TestCase;

public class TestProyectiles extends TestCase {
	
	public void testMovimiento(){
		
		ArrayList<Movil> listaDeMoviles = new ArrayList<Movil>();
		ArrayList<Botin> listaDeBotines = new ArrayList<Botin>();
		Coordenada ubicacion = new Coordenada(0,20);
		Proyectil laser = new Laser(ubicacion);
		Coordenada ubicacionCohete = new Coordenada(2,20);
		Proyectil cohete = new Cohete(ubicacionCohete);
		Coordenada ubicacionTorpedo = new Coordenada(10,22);
		Proyectil torpedo = new Torpedo(ubicacionTorpedo);
		Coordenada ubicacionTorpedoRastreador = new Coordenada(5,-20);
		Proyectil torpedoRastreador = new TorpedoRastreador(ubicacionTorpedoRastreador);
		
		listaDeMoviles.add(laser);
		listaDeMoviles.add(cohete);
		listaDeMoviles.add(torpedo);
		listaDeMoviles.add(torpedoRastreador);
		
		laser.vivir(listaDeMoviles,listaDeBotines);
		assertEquals(0,laser.verUbicacion().obtenerCoordenadaX());
		assertEquals(30,laser.verUbicacion().obtenerCoordenadaY());
		assertTrue(laser.estaVivo());
		laser.vivir(listaDeMoviles, listaDeBotines);
		assertEquals(0,laser.verUbicacion().obtenerCoordenadaX());
		assertEquals(40,laser.verUbicacion().obtenerCoordenadaY());
	    assertTrue(laser.estaVivo());
	    laser.hacerLeal();
	    laser.vivir(listaDeMoviles, listaDeBotines);
	    assertEquals(0,laser.verUbicacion().obtenerCoordenadaX());
		assertEquals(30,laser.verUbicacion().obtenerCoordenadaY());
	    assertTrue(laser.estaVivo());
		
		cohete.hacerLeal();
		assertTrue(cohete.verLealtad());
		cohete.vivir(listaDeMoviles, listaDeBotines);
		assertEquals(2,cohete.verUbicacion().obtenerCoordenadaX());
		assertEquals(10,cohete.verUbicacion().obtenerCoordenadaY());
		assertTrue(cohete.estaVivo());
		cohete.vivir(listaDeMoviles, listaDeBotines);
		assertEquals(2,cohete.verUbicacion().obtenerCoordenadaX());
		assertEquals(0,cohete.verUbicacion().obtenerCoordenadaY());
		assertTrue(cohete.estaVivo());
		
		torpedo.hacerLeal();
		assertTrue(torpedo.verLealtad());
		torpedo.vivir(listaDeMoviles, listaDeBotines);
		assertEquals(10,torpedo.verUbicacion().obtenerCoordenadaX());
		assertEquals(12,torpedo.verUbicacion().obtenerCoordenadaY());
		assertTrue(torpedo.estaVivo());
		torpedo.vivir(listaDeMoviles, listaDeBotines);
		assertEquals(10,torpedo.verUbicacion().obtenerCoordenadaX());
		assertEquals(2,torpedo.verUbicacion().obtenerCoordenadaY());
		assertTrue(torpedo.estaVivo());
		
		torpedoRastreador.vivir(listaDeMoviles, listaDeBotines);
		assertEquals(5,torpedoRastreador.verUbicacion().obtenerCoordenadaX());
		assertEquals(-10,torpedoRastreador.verUbicacion().obtenerCoordenadaY());
		assertTrue(torpedo.estaVivo());
		torpedoRastreador.vivir(listaDeMoviles, listaDeBotines);
		assertEquals(5,torpedoRastreador.verUbicacion().obtenerCoordenadaX());
		assertEquals(0,torpedoRastreador.verUbicacion().obtenerCoordenadaY());
		assertTrue(torpedo.estaVivo());
		
		
	};
	
	public void testColision(){
		ArrayList<Movil> listaDeObjetos = new ArrayList<Movil>();
		ArrayList<Botin> listaDeBotines = new ArrayList<Botin>();
		
		Avioneta exp = new Avioneta(0,0);
		
		Coordenada coordH2 = new Coordenada(0,12);
		Laser h2 = new Laser(coordH2);
		
		Coordenada coordH3 = new Coordenada(10,15);
		Laser h3 = new Laser(coordH3);
		
		h2.hacerLeal();
		h3.hacerLeal();
		
		
		listaDeObjetos.add(h2);
		listaDeObjetos.add(h3);
		listaDeObjetos.add(exp);
		
		int puntaje = h2.vivir(listaDeObjetos,listaDeBotines);
		assertEquals(2,h2.verUbicacion().obtenerCoordenadaY());
		assertTrue(listaDeObjetos.contains(exp));
		assertFalse(listaDeObjetos.contains(h2));
		assertTrue(puntaje == 0);
		
		int puntaje2 = (h3.vivir(listaDeObjetos,listaDeBotines));
		assertFalse(listaDeObjetos.contains(exp));
		assertFalse(listaDeObjetos.contains(h3));
		assertTrue(puntaje2 == 20);
	}


}
